package _6_13;

import java.util.*;

//2）知道两个矩形的左上和右下两个顶点，求交集矩形的顶点
public class Main {
    public static void main(String[] args) {
        
    }
    //无重复最长子串
    public int lengthOfLongestSubstring(String s) {
        int i=0,j=0;
        int n=s.length();
        Set<Character> set=new HashSet<>();
        int maxLen=0;
        while (j<n){
            while (set.contains(s.charAt(j))){
                set.remove(s.charAt(i));
                i++;
            }
            maxLen=Math.max(maxLen,j-i+1);
            set.add(s.charAt(j));
            j++;

        }
        return maxLen;
    }

    //两数之和  核心用空间来替换时间复杂度
    public int[] twoSum(int[] nums, int target) {
       //两数之和  a+b=target。  存储 target-b 如果有等于后面的  key 就是target-b  value是对应的索引
        Map<Integer,Integer> map=new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
             if (map.containsKey(nums[i])){
                 return new int[]{map.get(nums[i]),i};
             }
             map.put(target-nums[i],i);
        }
        return null;
    }
    //将相同的字符全部合并到一个分组里面去
    public List<List<String>> groupAnagrams(String[] strs) {
       Map<String,List<String>> map=new HashMap<>();
        for (int i = 0; i < strs.length; i++) {
            //拿到变为字符数组
            char c[]=strs[i].toCharArray();

            //排序之后
            Arrays.sort(c);
            // 新建一个对象
            String s=new String(c);
            if (!map.containsKey(s)){
                map.put(s,new ArrayList<>());
            }

            //添加到List中去
            List<String> strings = map.get(s);
            strings.add(strs[i]);
            map.put(s,strings);
        }
        // map.values()  所有的value
        return new ArrayList<>(map.values());
    }

    public int longestConsecutive(int[] nums) {

    }
}
